home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Calculators / RPNCalc / RPNCalc.app / RPNCalc.nib / data.nib (.txt) < prev    next >
NeXT TypedStream Data  |  1992-11-09  |  56KB  |  787 lines

  1. typedstream
  2. IBObjectData
  3. Object
  4. CustomObject
  5. Application
  6. Button
  7. Control
  8.     Responder
  9. [67@]
  10.     Helvetica
  11.     TextField
  12. TextFieldCell
  13. ActionCell
  14. ButtonCell
  15. ENTER
  16. Helvetica-Bold
  17. Matrix
  18. @:@iiii
  19. NXImage
  20. NXradio
  21. NXradioH
  22. ff@@#::s
  23. Radio
  24. CALCROT
  25. CALCDO2
  26. CALCEDIT
  27. CustomView
  28. CommandScroll
  29. Symbol
  30. Interactive
  31. ScrollView
  32. Update
  33. NXswitch
  34.     NXswitchH
  35. [43@]
  36. ClipView
  37. ciifffcfffs
  38. [33757c]{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;\f1\ftech Symbol;\f2\fmodern Ohlfs;\f3\fmodern Courier;}
  39. \margl40
  40. \margr40
  41. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\i0\ulnone\fs24\fc0\cf0 Introduction:
  42. \b0 \
  43. Welcome to the beta version of RPNCalc, yet-another-calculator-program for the NeXT Computer. Its language RPN Forth is by no means a full Forth implementation. In some ways it resemble Forth, hence the name, but in fact it is something slightly different. Used to my HP48SX I needed a RPN Calculator (Ever tried to use a 'normal' calculator when used to RPN? Like programming in Cobol, gahh...) and all these calculators out there does not have the features I want from my calculator or will cost a fortune. Mathematica
  44. \f0  or Maple V
  45. \f0  looks like too oversized ,the word for this seems to be kind of "Numeric Overkill", and so I went out to make my own.\
  46. I wrote this program to suit my own needs. It was originally never meant to be released to public and some quirks in the user interface and Forth-RPN language still remain. \
  47. However I think this hack works 99% of the time and it works well too. So I release this program free for personal use, in the hope it will serve a purpose and at least one user will find it useful. Please read the licence agreement before use.\
  48. This version is not fully tested, some functions are implemented in a brain-dead way and must be completely rewritten soon. Use this calculator only for evaluation purpose. If you find an error, please mail a short description to me. I want to improve RPNCalc in many ways, if you find something is missing just mail. If you have a piece of code of your own and you wish me to implement it in RPNCalc just mail. If you want to say how good and amazing this program is just mail.  Regardless of the remaining problems I hope you will like RPNCalc.\
  49. Frank Siegert, 29. Oct 1992\
  50. When reading this text, please keep in mind that english is not my native language.\
  51. \b Hint Hint:\
  52. \b0 \
  53. Top-of-Stack type can be one of:
  54. \b  Int 
  55. \b0 (Integer signed 32 bit),
  56. \b  Dbl 
  57. \b0 (Double float),
  58. \b  Str 
  59. \b0 (String),
  60. \b  Obj 
  61. \b0 (Object, that is a separate stack for matrix operations),
  62. \b  Cx 
  63. \b0 (Complex value) or 
  64. \b Em
  65. \b0  (Empty Stack)
  66. \b0 To define a funtion key, press the Define key and then the F key you want to define. Defines are local for every user of RPNCalc. \
  67. To give RPNCalc a fixed set of functions at startup, you can specify a startup file in the Preferences. This is local for every user of RPNCalc too.\
  68. \b0 Control-click-drag in the data stack overview  can be used to shuffle the stack.\
  69. Double-click in the data stack overview reinputs the element.
  70. \b0 You can always break out of a running function by pressing ESC.
  71. \b0 Click on the fish, Luke!
  72. EXAMPLES IN FORTH-RPN \
  73. Integer Arithmetic\
  74. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  75. \f3\b 17 4 + print                    simple addition
  76. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b0\fs24\fc0\cf0 \
  77. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\fs20\fc0\cf0 21 
  78. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  79. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  80. \f3\b 12 3 / print                    simple division\
  81. \f2\b0 4 \
  82. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  83. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  84. \f3\b 12 0 / print                    division by zero not allowed\
  85. \f2\b0  DIVISION BY ZERO ENCOUNTERED ERROR 7: /\
  86. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  87. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  88. \f3\b 12323 34 % print                modulo operation\
  89. \f2\b0 15 \
  90. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  91. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  92. \f3\b 12323 34 / print                check result of modulo\
  93. \f2\b0 362 \
  94. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  95. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  96. \f3\b 362 34 * 12323 - print            is ok\
  97. \f2\b0 15 \
  98. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  99. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  100. \f3\b 2 1 shl print                    shift left operator\
  101. \f2\b0 4 \
  102. \f3\b 2 2 shl print                    \
  103. \f2\b0 8 \
  104. \f3\b 3 2 shl .                    . is a shortcut for print\
  105. \f2\b0 12 
  106. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  107. Floating Point Arithmetic\
  108. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  109. \f3\b 12.2 12.2 * print                simple multiplication\
  110. \f2\b0 148.840000
  111. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  112. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  113. \f3\b 23.3 1.32234 / print                simple division\
  114. \f2\b0 17.620279 \
  115. \f3\b 1.2 0.0 / print                division by zero not allowed\
  116. \f2\b0  DIVISION BY ZERO ENCOUNTERED ERROR 7: /\
  117. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  118. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  119. \f3\b 23.3 1.32234 / "%2.14f" printf        result has double accuratcy\
  120. \f2\b0 17.62027920202066\
  121. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  122. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  123. \f3\b 3.14159 4.0 / sin print            sin of Pi/4\
  124. \f2\b0 0.707106 \
  125. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  126. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  127. \f3\b 2.0 2.0 power print                2^2\
  128. \f2\b0 4.000000 \
  129. \f3\b 3.0 2.0 power print                2^3\
  130. \f2\b0 8.000000 
  131. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  132. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  133. \f3\b 3 2.0 power print                Integers and floats can be mixed\
  134. \f2\b0 8.000000 \
  135. \f3\b 45.0 grad2rad sin print            Sin Pi/4\
  136. \f2\b0 0.707107 
  137. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  138. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  139. \f3\b 3.14159 4.0 / sin print            yes, grad2rad works...\
  140. \f2\b0 0.707106 \
  141. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  142. Complex Arithmetic\
  143. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 \
  144. \f3\b 22.2,1.2 23.2,1.3 + print            Complex addition\
  145. \f2\b0 45.400000,2.500000 \
  146. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  147. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  148. \f3\b 12.2,11.2 1.2,2.4 * print            Complex multiplication
  149. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\fs24\fc0\cf0 \
  150. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 -12.240000,42.720000 
  151. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  152. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  153. \f3\b -12.240000,42.720000 dup re print im print    Split up in Re and Im\
  154. \f2\b0 -12.240000 42.720000 \
  155. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  156. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  157. \f3\b 1.25 12.2 Cconstruct print            Build complex out of float\
  158. \f2\b0 1.250000,12.200000 
  159. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  160. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  161. \f3\b 2.1,2.3 sqrt print                Complex root\
  162. \f2\b0 1.614695,0.712209 
  163. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  164. Variables\
  165. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  166. \f3\b 12 "test" set                    set var named test to 12\
  167. \f2\b0 > 
  168. \f3\b "test" get print                push var named test and print\
  169. \f2\b0 12                         * Version note: This was not\
  170.                         * possible in version beta 1\
  171.                         * due to an extremly silly\
  172.                         * typo I made during final\
  173.                         * fixup... \
  174. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  175. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  176. \f3\b 12.2,12.2 "test" set                set var named test to complex\
  177. \f2\b0 > 
  178. \f3\b "test" print                    wrong! this prints the name.\
  179. \f2\b0 test \
  180. \f3\b "test" get print                push var named test and print\
  181. \f2\b0 12.200000,12.200000 \
  182. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  183. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  184. \f3\b 1 2 set                    You can use integer numbers as\
  185.                         index\
  186. \f2\b0 > 
  187. \f3\b 2 get print                    push var named 1 and print\
  188. \f2\b0 1 \
  189. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  190. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  191. \f3\b 9 2.0 set                    You can use float numbers as\
  192.                         index. Well, rounding error can\
  193.                         still have serious impacts...\
  194. \f2\b0 > 
  195. \f3\b 2.0 get print                    push var named 2.0 and print\
  196. \f2\b0 9 \
  197. \f3\b test print                    push var named test and print.\
  198. \f2\b0 12.200000,12.200000
  199. \f3\b                 Work only if autovar is enabled                         and "test" is no valid function\
  200.                         name. This is a shortcut to get\
  201.                         variables quickly in the                             calculator display. See autovar.\
  202. \f2\b0  \
  203. Note: Whenever floats or intergers are used as a variable name, the "real" name is constructed by converting the number to a string and adding this string to the string value contents of variable "defvar". "defvar" is set to "var" as default, but this may be changed. The variable "defvar" cannot be destroyed.\
  204. \f3\b "Hubba" get                    variables must exist before use\
  205. \f2\b0  NAME LOOKUP FAILED ERROR 4: get\
  206. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  207. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  208. \f3\b "test" forget                    you can destroy variables\
  209. \f2\b0 > 
  210. \f3\b "test" get\
  211. \f2\b0  NAME LOOKUP FAILED ERROR 4: get\
  212. \f3\b "Just a string" "test" set            variables can hold strings too
  213. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\fs24\fc0\cf0 \
  214. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  215. \f3\b "test" get print
  216. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\fs24\fc0\cf0 \
  217. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 Just a string\
  218. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\fs24\fc0\cf0 \
  219. External Communication and Input\
  220. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  221. \f3\b "/bin/ls" sysexec                execute the program /bin/ls\
  222.                         and put all return values on the                         stack, all characters                                 below space are treated as                             delimter.\
  223. \f2\b0 > 
  224. \f3\b "Edit" settarget                set Edit.app the Target                             Application for the following                             emit commands\
  225. \f2\b0 > 
  226. \f3\b "Hubba Hopp" emit                send this string to Edit.app 
  227. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\fs24\fc0\cf0 \
  228. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fs20\fc0\cf0 > 
  229. \f3\b "!CnHubba Hopp" emit                send CMD-n and this string to                             Edit.app 
  230. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\fs24\fc0\cf0 \
  231. Programming examples (not completed yet)\
  232. \b0 The famous hello world is quite easy in FORTH-RPN
  233. \f3\fs20 :main "Hello world!" print ;\
  234. \f0\b0\fs24 execute it with 
  235. \f3\b\fs20 \
  236. > main
  237. \f0\fs24 \
  238. \f3\fs20 Hello world!\
  239. \f0\fs24 \
  240. \b0 Now type the following (but do not press Return! Read on!)
  241. \f3\fs20 do t "Hello world!" print while
  242. \f0\fs24 \
  243. \b0 There is no stop condition and this code keeps looping forever or until you press\
  244. the ESC key. To test it, press Return, watch the program go and press ESC. 
  245. \b0 As an example for function define we type \
  246. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f3\fs20\fc0\cf0 :test do 1 + dup dup print 1000 == ! while drop ;
  247. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b0\fs24\fc0\cf0     
  248. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 \
  249. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0                                              ^------- note the space here!\
  250. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 \
  251. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 the function test take the first stack element and loop until it reach1000.\
  252. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\fs20\fc0\cf0 > 
  253. \f3\b 989 test
  254. \f2\b0 \
  255. 990 991 992 993 994 995 996 997 998 999 1000 \
  256. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 \
  257. \f0\fs24 To calculate the german VAT (14%) one can define this function
  258. \f2\fs20 \
  259. \f3\b :mwst dup 0.14 * + "%4.02f DM" printf ;
  260. \f2\b0 \
  261. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  262. \f3\b 120.0 mwst\
  263. \f2\b0 136.80 DM\
  264. To turn this function into a subroutine just change it to\
  265. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f3\b\fc0\cf0 :mwst dup 0.14 * + "%4.02f DM" printf return ;
  266. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fc0\cf0 \
  267. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 \
  268. now you can use \
  269. \f3\b  123.0 "mwst" getadr t call \
  270. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\b0\fc0\cf0 136.80 DM\
  271. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f3\b\fc0\cf0 \
  272. \f2\b0 to call this function in your own programs\
  273. You can still use it as\
  274. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  275. \f3\b 120.0 mwst\
  276. \f2\b0 136.80 DM\
  277. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 \
  278. since go or return just do nothing if the address stack is empty. Warning: If the address stack contains a return address this is used for the return.... Sometimes not what you want... a 
  279. \f3\b areset 
  280. \f2\b0 command can help in this case.\
  281. Someday you will get tried from typing all this getadr t call stuff, why not defining it as a exec function:\
  282. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  283. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f3\b\fc0\cf0 :exec getadr t call ;\
  284. \f0\b0 now\
  285. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f2\fc0\cf0 > 
  286. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f3\b\fc0\cf0 123.0 "mwst" exec 
  287. \f2\b0 \
  288. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 136.80 DM\
  289. will do it without much typing.\
  290. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 \
  291. Now for something completely different: \
  292. The callback function: Unlike call returns callback to itself, takes the first data stack element and jumps if true to the address on the top of the address stack, if any. Actually this function was a mistake (just forgot to calculate the return address correct), but I left this function in the language anyway.\
  293. This way the subroutine or caller can leave a function-to-be-called-next on the address stack and return with t on the data stack, a single callback will do the rest.\
  294. Let's see how this looks like:\
  295. \f3\b :mwst dup 0.14 * + "%4.02f DM" printf f return ;
  296. \f2\b0  \
  297. \f3\b :customs dup 0.09 * + "%4.02f DM -> " printf t return ;
  298. \f2\b0 \
  299. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  300. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f3\b\fc0\cf0 123.0  "mwst" getadr 
  301. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 "customs" getadr dup 
  302. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 t call
  303. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 back
  304. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f2\b0\fc0\cf0 \
  305. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 134.07 DM -> 140.22 DM
  306. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 \
  307. mhmm... Maybe a bit deranged but... as you have seen this is no commercial product but something to play with.\
  308. To build a jump table just\
  309. \f3\b "func1" getadr popa2d 1 set\
  310. "func2" getadr popa2d 2 set\
  311. "func3" getadr popa2d 3 set\
  312. "func4" getadr popa2d 4 set
  313. \f2\b0 \
  314. \f3\b > 2 get pushd2a t call \
  315. \f2\b0 \
  316. will call the second function, of course the functions must be defined before use.\
  317. Now a very few word about call other program. Maybe you want to send your results direct to Edit.app? Nullo problemo, just type\
  318. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  319. \f3\b "Edit" settarget\
  320. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f2\b0\fc0\cf0 to set Edit.app the target application. To open a new window in Edit and send the whole stack we can use this code fragment:\
  321. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  322. \f3\b "!Cn" emit
  323. \f2\b0  
  324. \f3\b do emit ddepth while\
  325. \f2\b0    |\
  326.     |\
  327.     Send a CMD-n to Edit\
  328. \f3\b \
  329. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f2\b0\fc0\cf0 Well, now we reached a point where we may want to call a external program, maybe to flood the stack with the contents of your directory, well just type:\
  330. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  331. \f3\b "ls" sysexec\
  332. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f2\b0\fc0\cf0 \
  333. Maybe we want a interface to some un*x program, like telnet? Just type:\
  334. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  335. \f3\b "telnet" sysproc\
  336. \f2\b0 > 
  337. \f3\b t autopush\
  338. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f2\b0\fc0\cf0 Now telnet is started and kept open, in contrast sysexec just execute and return. You can send data to the opened process by\
  339. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 > 
  340. \f3\b "open blubber.somewhere.edu\\n" pemit\
  341. \f2\b0 This function was originally implemented to run gnuplot from RPNCalc. If you do not like the returning data to be pushed to the data stack set autopush to false. \
  342. \f3\b f autopush
  343. \f2\b0 \
  344. Now, all return from the subprocess will be pushed to hyperspace. 
  345. \f3\b \
  346. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f2\b0\fc0\cf0 \
  347. \f0\b\fs24 FORTH-RPN LANGUAGE
  348. \f2\b0\fs20 \
  349. \f0\fs24 - Integers are signed 32-bit values. \
  350. - Floats values are doubles, described in the man page for 'math', man 3 math\
  351. - Complex values consist of two double values\
  352. - Strings can have arbitary length and are zero limited.*
  353. \f2\fs20 \
  354. \f0\fs24 - Variables and functions are defined global.
  355. \f2\fs20 \
  356. * functions can only handle 1024 byte strings at the moment.\
  357. \f0\b\fs24 F = double float, I = Integer, C = Complex, S = String element\
  358. Operators             On data stack            Comments\
  359.                    Before              After\
  360. COMMENTS\
  361. \b0 /*/ This is a comment /*/                     Comments start and end with "/*/"\
  362. PUSH VALUES TO DATA STACK:\
  363. \b0 double number        -     ->    1F            push the number as double value on                                         the data stack, separator is , or .                                         depending on your keyboard settings.
  364. \b0 0xnumber             -      ->     1I            push the hexadecimal number as\
  365.                                         integer on the data stack.\
  366. 0onumber             -      ->     1I            push the octal number as\
  367.                                         integer on the data stack.\
  368. 0bnumber             -      ->     1I            push the binary number as\
  369.                                         integer on the data stack.\
  370. number                -    ->    1I            same for decimal\
  371. double,double        -    ->    1C            push the number as\
  372.                                         two double values,\
  373.                                         a complex number,\
  374.                                         on the data stack\
  375. "a String"                -    ->    1S            push the string on\
  376.                                         the data stack\
  377. systime                -    ->    1I            push the current time\
  378.                                         in seconds from 1970\
  379.                                         (see man 3 time)\
  380. time                    -    ->    1S            push the current time\
  381.                                         in ASCII format as string\
  382.                                         (see man 3 time)\
  383. ddepth                -    ->    1I            push curent depth of\
  384.                                         data stack to data stack\
  385. adepth                -    ->    1I            push curent depth of\
  386.                                         address stack to data stack\
  387. t                    -    ->    1I            same as 0x1\
  388. f                    -    ->    1I            same as 0x0\
  389. \b CONVERTING DATA STACK ELEMENTS\
  390. \b0 \
  391. float                    1I    ->    1F            convert top of stack integer element to                                         double float\
  392. hex                    1I    ->    1S            convert top of stack integer element to\
  393.                                         hexadecimal string\
  394. oct                    1I    ->    1S            convert top of stack integer element to\
  395.                                         octal string\
  396. bin                    1I    ->    1S            convert top of stack integer element to\
  397.                                         binary string, only the 16 lowest bits\
  398. bin32                1I    ->    1S            convert top of stack integer element to\
  399.                                         binary string, all 32 bits\
  400. For conversion of floats or complex values read the next paragraph.\
  401. \b ARITHMETIC AND LOGIC OPERATIONS:\
  402. \b0 \
  403. +                    2    ->    1    IFSC    addition, strings work\
  404. - / *                    2     ->    1    IFC        arithmetic operators,\
  405. & | ^                 2    ->    1    I        logical operators\
  406. !                    1     ->    1    I        not operator\
  407. ==                     2    ->     1I    IFSC    compare operators\
  408. < >    >= <=            2    ->     1I    IFS        compare operators\
  409. \b0 shr, shl                2     ->    1    I        shift right, shift left\
  410. rad2grad                1F    ->    1F            rad to grad conversion\
  411. grad2rad                1F    ->    1F            grad to rad conversion\
  412. rint                    1F    ->    1I            see man 3 math\
  413. floor                    1F    ->    1I        \
  414. ceil                    1F    ->    1I        \
  415. fabs                    1F    ->    1F        \
  416. sqrt                    1FC    ->    1FC            \
  417. cbrt                    1F    ->    1F        \
  418. sin, cos, tan            1F    ->    1F\
  419. asin, acos, atan        1F    ->    1F        \
  420. sinh,cosh,tanh        1F    ->    1F        \
  421. asinh,acosh,atanh        1F    ->    1F        \
  422. erf                    1F    ->    1F\
  423. exp                    1F    ->    1F        \
  424. log                    1F    ->    1F\
  425. log10                1F    ->    1F\
  426. logb                    1F    ->    1F        \
  427. copysign                2F    ->    1F\
  428. lgamma                1F    ->    1F\
  429. hypot                2F    ->    1F\
  430. bessely            1I 1F    ->    1F\
  431. besselj            1I 1F    ->    1F\
  432. power                2F    ->    1F\
  433. drem                2F    ->    1F    \
  434. finite                1F    ->    1I\
  435. re                    1C    ->    1F            real part of complex\
  436. im                    1C    ->    1F            im part of complex\
  437. Cconjugate            1C    ->    1C            conjugate complex\
  438. Cconstruct            2F    ->    1C            build complex from floats coordinates\
  439. Cpconstruct            2F    ->    1C            build complex from amplitude and                                         phase\
  440. Cphase                1C    ->    1F            phase of complex\
  441. Cscale            1C    1F    ->    1C            multiply scalar with complex\
  442. randomfloat            -    ->    1F            random number\
  443. randomint            -    ->    1I            random number\
  444. randomcomplex        -    ->    1C            random number\
  445. randomseed            1I    ->    -            seed random generator\
  446. \b BASIC FORTH COMMANDS\
  447. \b0 \
  448. drop                    1    ->    -    IFSC    drop data
  449. \b0 dup                    1    ->    2    IFSC    duplicate \
  450. swap                2    ->    2    IFSC    swap\
  451. rot                    3    ->    3    IFSC    rotate top 3 elements\
  452. copy                1I    ->    1    IFSC    get Nth element from the data stack\
  453. turn                    -    ->    -            turn data stack\
  454. if                    1I    ->    -            conditional clause start\
  455. else                    -                    begin of else part of conditional \
  456. endif                -                    end of conditional\
  457. If clauses can be nested as deep as you like. \
  458. \b CALLING OF FUNCTIONS
  459. \b0 \
  460. getadr                1S    ->    [adr]            Push address of dictentry to\
  461.                                         address stack\
  462. pusha 
  463. \fs20 or
  464. \fs24  do            -    ->    [adr]            pushes current pc to\
  465.                                         address stack\
  466. dropa                [adr]    ->    -            drops the entry on                                         the top of the                                         address stack\
  467. popa2d                [adr]    ->    1S            pop address stack entry into \
  468.                                         a special string value and push it\
  469.                                         on the data stack\
  470. pushd2a                1S    ->    [adr]            pop a special string value from\
  471.                                         the data stack and push it as address\
  472.                                         on the address stack
  473. \b0 go 
  474. \fs20 or
  475. \fs24  while            1I    ->    -            if poped Integer true goto the position                                         pointed by top of adress stack \
  476.                                         and pops position from address stack\
  477. return                -    ->    -            goto the position pointed by top of \
  478.                                         adress stack and pops position from                                         address stack, same as "t go"\
  479. call                    1I    ->    -            if true goto to position pointed by top                                         of  the address stack, pop this from the                                         address stack and push the address of                                         the next command to it \
  480. callback                1I    ->    -            same as call but push the address of                                         the callback to the address stack\
  481. aremember                                remember the depth of the address                                         stack.\
  482. arecall                                    recall the depth of the address stack,                                         work only if current stack is deeper \
  483.                                         than remembered stack. This does not \
  484.                                         change the stack but the stackpointer.\
  485. \b CLEARING THE STACKS
  486. \b0 \
  487. dreset                -                    clear the data stack\
  488. areset                -                    clear the address stack\
  489. ireset                -                    clear the if-else-endif stack, close                                         every if case\
  490. restoredstack            -                    restore the data stack to the state at                                         the moment the FORTH engine was                                         called, very useless when executed in\
  491.                                         Interactive mode since the stack will \
  492.                                         be restored to the same state.\
  493. \b IDENTIFICATION OF ELEMENTS\
  494. \b0 elemtype                -    ->    1I    IFCS    push an integer value to the data \
  495.                                         stack:\
  496.                                         0 if Top-Of-Stack element is an integer\
  497.                                         1 if Top-Of-Stack element is a float
  498. \b0                                         2 if Top-Of-Stack element is complex\
  499.                                         3 if Top-Of-Stack element is a string\
  500.                                         4 if Top-Of-Stack element is an object\
  501.                                         and -1 if stack is empty\
  502. \b PRINTING RESULTS\
  503. \b0 print                    1IFSC    ->    -        pops and display value from top of\
  504.                                         data stack\
  505. . or ,                 1IFCS    ->    -        shortcut for print, character depends \
  506.                                         on the Keyboard settings in the \
  507.                                         preferences\
  508. printf            1S, 1IFSC    ->    -        pops and display value from top of\
  509.                                         data stack using a format string.\
  510.                                         The format string must be printf alike                                         and only one value (top-of-stack) is \
  511.                                         printed.\
  512. sprint 
  513. \fs20 or
  514. \fs24  sprintf                            same as the print/printf counterpart                                         except that a string element is created\
  515. \b DEALING WITH VARIABLES\
  516. \b0 \
  517. set                1IFSC,1IFSC     ->      -        pop value from stack and  put it into \
  518.                                         variable defined by 2th arg\
  519. get                    1IFSC    ->    1        push variable to stack\
  520. forget                1IFS    C    ->    -        remove variable from memory\
  521. listvars                                    list all defined variables\
  522. autovar                1I        ->    -        switch the use name-as-var-if-not-in-                                         dict feature on or off, default is on.\
  523. \b DEFINITION AND EXECUTION OF FUNCTIONS\
  524. \b0 \
  525. :<name>                                    start definition of a FORTH function\
  526. ;                                        end definition of a FORTH function\
  527. <name>                                    execute the defined FORTH function\
  528. forgetdict                1S        ->    -        delete FORTH definition from dict\
  529. cleardict                                    erease all defined FORTH functions\
  530. listdict                                    list all defined FORTH functions\
  531. ?:<name>                                print this FORTH function.\
  532. There is a difference in executing to calling: A call push a return address to the address stack, an exec simply change the context to the given function and return automagically to the caller context at the end.\
  533. \b STRING HANDLING (limited to 1024 byte length of string at the moment)\
  534. \b0 \
  535. ==                    1S    1S    ->    1I        string compare\
  536. +                    1S    1S    ->    1S        add two strings\
  537. strlen                1S        ->    1I        take string and push its length in bytes\
  538. getsubstr                1S (1I) 1I    ->    1S        get substring starting at a position (1st                                         arg) and for a length (2nd arg), if no                                         second argument is given a length of                                         1 is assumed.\
  539. setsubstr                1S 1S 1I    ->    1S        set substring at position (1st arg),                                         resize the string if needed\
  540. delsubstr                1S  1I 1I    ->    1S        erase segment in string resizing it\
  541. breakup                1S    1S    ->    ....        use argument one as delimiter and                                         break the string up \
  542. eval                    1S        ->    ....        treats the string as input for the                                         FORTH engine\
  543. frame                1S        ->    1S        put the string in "" pairs for eval and \
  544.                                         change \\n and \\t to literals\
  545. instr                    1S    1S    ->    1I        push the count of substrings (1st arg)\
  546.                                         found in the string (2nd arg)\
  547. str2int                1S        ->    nI        convert a string to integers (chars),\
  548.                                         null at string end is converted too!\
  549. int2str                nI    1I    ->    1S        build a string from integers, 1st arg is                                         length. Null is not needed at end.\
  550. \b EXTERNAL COMMUNICATION\
  551. \b0 \
  552. sysexec                1S        ->    ...         calls UNIX command defined in string                                         and push the return arguments as                                         string to the stack.\
  553. settarget                1S        ->    -        set target application for emit                                         command\
  554. emit                    1S        ->    -        send string to remote application by                                         faking key down events, not very                                         nice but it works, anyone knows how                                         to make it better? If yes, please send                                         me a mail. This was borrowed from a                                         little  program I found  in the                                         newsgroup next.programmers from                                         Dave Griffiths [dave%prim@                                         germany.eu.net].\
  555.                                         Use "!C" to send CMD-keys, like\
  556.                                         "!Cn" for faking CMD-n, etc...\
  557.                                         Of course "!!" send a '!' char.\
  558. sysproc                 1S        ->    ...        Ah! Features! Open a subprocess\
  559.                                         shell (/bin/sh) and give the arg to it.                                         All output  from the shell process is                                         directed to the data stack. \
  560. pemit                1S        ->    -        send the string to the subprocess shell\
  561. autopush                1I        ->    -        if true send output from subprocess to\
  562.                                         data stack, default is false\
  563. \b OTHER COMMANDS\
  564. \b0 \
  565. dictinfo                                    show system statistics \
  566. trace                                    toggle trace on/off\
  567. loadimage            -    ->    -            load dumped functions from file\
  568. dumpimage            -    ->    -            dump all defined functions to file\
  569.                                         Ask for file name by using a open\
  570.                                         or save panel\
  571. copyright                -    ->    -            print my email address\
  572. help                    -    ->    -             nothing useful at the moment\
  573. Note: You can always break out of a running FORTH function by pressing ESC.
  574. \f2\fs20 \
  575. \f0\b\fs24 Known bugs and problems in this version:\
  576. \b0\fs20 \
  577. - Well, it's beta software, you know what I mean: dirty, untested, unstable and buggy. \
  578.   ---> Lots of bugs in any colour and size to be expected.\
  579. - The different handling of integers and floats is not very nice, I am working on a better solution.\
  580. - The string handing is not finished, strings are limited to 1024 bytes in the functions since these are \
  581.    only a quick hack for the moment.\
  582. - The implementation of variables and dicts is very, very slow, the interpreter is even slower. \
  583. - The shell is limited, help is not completed yet and the documentation is virtually non-existent.\
  584. - Variables are not dumped with dumpimage, you must set vars in dumps by editing the dump file.\
  585. - Error and exception handling is not implemented yet.\
  586. - Address stack has a fixed depth of 1024 entries, however If & Data stack are approx. unlimited.\
  587. - The n-dimensional matrix functions are not fully completed yet and therefor not documented here\
  588. The optimized FORTH-RPN engine will be avaiable soon (I hope).  I plan to release the source code as Copyleft. If you are interested just write me a email. At the moment I cannot give away the source due to some heavy constructs in it (Asche auf mein Haupt).\
  589. Thanks to Andreas Haug (andreas@atlas.physchem.chemie.uni-tuebingen.de) for his suggestions and\
  590. Joachim F. Klausch for the opportunity to port this to NS 3.0, took about 20 minutes...\
  591. Thanks to Dave Griffiths (dave%prim@germany.eu.net) for the code fragment about posting key event to other applications. I have used some suggestions in my own code.\
  592. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\fc0\cf0 Feel free to send 
  593. \b short
  594. \b0  bug reports,suggestions and comments to\
  595. \b Frank Siegert\
  596.             franks@nadia.stgt.sub.org
  597. \b0 \
  598.             Please 
  599. \b don't
  600. \b0  send NeXT mail ! \
  601. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 \
  602. Version notes b2: \
  603. Beta 1 has a *dumb* bug and did not accept strings as variable identifiers, this is fixed. Thanks to\
  604. Glen Worstell for notifying me about this. \
  605. The fish picture was rayshaded on a NeXT using rayshade 4.0 and the aquarium.ray file.\
  606. All used trademarks are trademarks of their owning companies and are used for identification purpose only.
  607. NXCursor
  608. NXibeam
  609. Scroller
  610. _doScroller:
  611. @@@ffs
  612.     Workbench
  613. Toggle Dec/Hex display
  614. Top-of-Stack type
  615. Function keys
  616. Define function keys
  617. Rot 3 elements
  618. Clear stack
  619. Copy element
  620. Float <-> Int
  621. Clear display
  622. Shift left/right
  623. RPNCalc Help
  624. Modus
  625. Restore Data stack
  626. Data stack depth
  627. RPNCalculator
  628. MenuCell
  629. Paste
  630. Select All
  631. MenuTemplate
  632. *@*@ccc
  633. RPNCalc
  634. Info Panel...
  635. Preferences
  636. About...
  637. submenuAction:
  638. NXmenuArrow
  639. Forth Dict
  640. Load...
  641. Dump Dict...
  642. Windows
  643. Arrange in Front
  644. Miniaturize Window
  645. Close Window
  646. Services
  647. Fdump
  648. Frank Siegert 1992
  649. WindowTemplate
  650. iiii***@s@
  651. Panel
  652. [11@]
  653. Version 0.96b2
  654. 3Copyright 1992, Frank Siegert - All rights reserved
  655. It's still 
  656. the Beta version
  657. Licence
  658. APicture
  659. Helvetica-BoldOblique$
  660. fish like it
  661. Floating point format string
  662. American Keyboard (.)
  663. German Keyboard (,)
  664. Floating point input format
  665. Startup initialization file
  666. Preferences Panel
  667.     OFFSCREEN
  668. [168c]{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;}
  669. \margl40
  670. \margr40
  671. \pard\tx533\tx1067\tx1601\tx2135\tx2668\tx3202\tx3736\tx4270\tx4803\tx5337\f0\b0\i0\ulnone\fs24\fc0\cf0 
  672. Cancel
  673.     fractView
  674. +Fract3D: Click in me to draw new fractal...
  675. About
  676. [3066c]{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;}
  677. \margl40
  678. \margr40
  679. \f0\b\i\ulnone\ql\fs152\fi0\li0\gray0\fc0\cf0\up0\dn0 RPN Calc\
  680. \i0\fs24        copyright by Frank Siegert 1992 - All rights reserved
  681. \b0 \
  682. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\b\fs36\fc0\cf0 Disclaimer:
  683. \b0\fs24  \
  684. \pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\fc0\cf0 This software is provided "as is" without warranty of any kind, either expressed or implied, including but not limited to the implied warranties of merchantability and fitness for a particular purpose.\
  685. \b No Liability for Consequential Damages:
  686. \b0  In no event shall the author be liable for any damages, including any lost profits, lost savings, lost data, buisness interruption or other incidential or consequential damages arising out of the use or inability to use this software, even if advised of the possiblity of such damages.\
  687. \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\b\fs36\fc0\cf0 Licence Agreement:
  688. \b0\fs24  \
  689. \b RPNCalc is a copyrighted work
  690. \b0 , distributed free of charge for personal, educational, and noncommercial use.  
  691. \b It may not be sold for profit, nor incorporated in products sold for profit 
  692. \b0 without the express permission of the author.  However, recognized NeXT User Groups may include it on diskettes, tapes, CD-ROMs, or other media priced above time-and-materials costs for fundraising purposes.  This software may be placed on Internet archive sites or other public software archives provided that no "download" or other access charges are collected.\
  693. If you want to use RPNCalc for commercial purposes, you must contact me before. \
  694. \b You have read and understand
  695. \b0  the above disclaimer. You understand that 
  696. \b you are working at your own risk
  697. \b0 . You understand that 
  698. \b this is copyrighted software
  699. \b0  that you may use free of charge but
  700. \b  without any warranties
  701. \b0 .\
  702. 3. Due to the extraordinary low price ($0) 
  703. \b I cannot give support
  704. \b0  for this program. You are on your own. However I have email and you can send bug reports and/or suggestions to me. Please, please 
  705. \b send only plain-ascii mail
  706. \b0  otherwise my mailer cannot receive it.\
  707. 4. This licence agreement
  708. \b  is only valid for the Version 0.96
  709. \b0  of RPNCalc. Future versions may have different licence agreements.\
  710. I think that anyone can live with this licence agreement. If you do not accept this licence agreement you may not use this program.\
  711. If you want to use the FORTH-RPN engine in your own programs please contact me. When everything is cleaned up, maybe I give out the source code, but at the moment this is not possible. Well, if I find time I will rewrite and clean it up a bit.\
  712. If you think something is missing in FORTH-RPN contact me too.\
  713. Feel free to send 
  714. \b short
  715. \b0  bug reports,suggestions and comments to\
  716.         Frank Siegert\
  717.         franks@nadia.stgt.sub.org
  718. \b0 \
  719.         Please 
  720. \b don't
  721. \b0  send NeXT mail ! \
  722. Flames to /dev/null please....
  723. Window
  724. FontManager
  725. Field_
  726. RPNCalcInstance_
  727. Calculator_
  728.     Offscreen_
  729. RPNCalculatorInstance_Y
  730. Field31_
  731. FractPanel1_
  732. Field3_
  733. Matrix1_
  734. Field2_3
  735. Button1_
  736. MainMenu_
  737. Box1_
  738. Font Manager_
  739. Field1_
  740. VersionNumber_
  741. File's Owner_7
  742. Button2_
  743. ScrollingText_
  744.     PrefPanel_
  745. Button3_,
  746. CalculatorMacroEdit_
  747. HelpWindow_
  748. [103@]
  749. IBControlConnector
  750. IBConnector
  751. hide:
  752. terminate:
  753. copy:
  754. paste:
  755. selectAll:
  756. IBOutletConnector
  757. delegate
  758. makeKeyAndOrderFront:
  759. enterCalculator:
  760. CalculatorDisplay
  761. CalculatorMode
  762. CalculatorState
  763. CalculatorWindow
  764. manageCalcDisplay:
  765. performMiniaturize:
  766. performClose:
  767. arrangeInFront:
  768. CALCEditScroll
  769. CALCEditWindow
  770. saveCALCEditSection:
  771. updateCalcDisplay:
  772. commandView
  773. OnStackIsElemInfo
  774. performClick:
  775. FloatDisplay
  776. theKeyboardType
  777. setKeyboardType:
  778. clearDisplay:
  779. TheStartUpFile
  780. setStartupfile:
  781. TheStackView
  782. TheStackUpdate
  783. TheModusDisplay
  784. AddressStackDepth
  785. IfStackDepth
  786. drawFract:
  787.